import { ApiProperty } from '@nestjs/swagger';

// 业务状态码枚举
// 定义API响应的状态码
export enum ResponseStatusEnum {
  SUCCESS = 0, // 成功
  ERROR = 1, // 错误
  FORBIDDEN = 401 // 未授权
}

// 统一响应结果 DTO
// 用于封装所有API的响应数据
// T 为泛型参数,表示响应数据的类型
export class ResponseResultDto<T> {
  // 响应状态码
  // @ApiProperty - Swagger文档装饰器
  @ApiProperty({ description: '状态码', default: 0 })
  readonly code: number;

  // 响应消息
  @ApiProperty({ description: '信息', default: 'success' })
  readonly message: string;

  // 响应数据
  readonly data: T;

  // 构造函数
  // 用于创建响应结果实例
  constructor(code: number, data?: any, message = 'success') {
    this.code = code;
    this.data = data;
    this.message = message;
  }

  // 创建成功响应的静态方法
  static success(data?: any, message = 'success') {
    return new ResponseResultDto(ResponseStatusEnum.SUCCESS, data, message);
  }

  // 创建错误响应的静态方法
  static error(message = 'error', code = ResponseStatusEnum.ERROR) {
    return new ResponseResultDto(code, null, message);
  }
}
